<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');
global $data, $admin;

class Checklist extends CI_Controller {

    public function __construct() {
        parent::__construct();
        global $admin, $data;
        # cargamos variables
        $admin = $this->session->userdata('admin');
        $admin['place'] = 'checklist';
        # verifica si pasó por sushitto
        if($admin['ta_tipo_administrativo_id']!=1) {
            redirect('sushitto');
        }
        $this->output->enable_profiler(TRUE);
        $this->carga_estadisticas();
    }
    
    public function index() {
        global $data, $admin;
        #el cuestionario ya empezo?
        if($this->session->userdata('categoria')){
            #antes de procesar se verifica que sea el reporte
            $this->isUltimaCategoria($this->session->userdata('categoria'),$this->session->userdata('plan_accion_checklist'));
            #si no es la ultima categoria se tiene que procesar los datos
            #de la categoria donde se encuentraz
            $this->procesar();
        }
        
        $this->load->helper('date');
        
        $lista_sucursales = $this->checklist_model->lista_sucursales();
        
        $data['lista_sucursales'] = $lista_sucursales;
        
        $this->load->view('template/header', $admin);
        $this->load->view('template/open_content_container');
        $this->load->view('menu/menu_supervisor', $data);
        $this->load->view('checklist/inicio_checklist');
        $this->load->view('template/close_content_container');
        $this->load->view('template/footer');
    }
    
    public function comenzar(){
        $this->form_validation->set_rules('gerente', 'jefe_cocina', 'required|trim|xss_clean');
        
        if (!$this->form_validation->run()) {
            redirect('checklist');
        }
        
        $fecha_evaluacion = $this->input->post('fecha_evaluacion');
        $sucursal = $this->input->post('sucursal');
        $gerente = $this->input->post('gerente');
        $jefe_cocina = $this->input->post('jefe_cocina');
        
        $cuestionario = $this->checklist_model->crear_cuestionario($fecha_evaluacion,$jefe_cocina,$gerente,$sucursal);
        $this->session->set_userdata('d_dh_id', $cuestionario->id);
        $this->session->set_userdata('categoria','1');
        $this->session->set_userdata('plan_accion_checklist',FALSE);
        $this->session->set_userdata('auxiliar',FALSE);
//        
//        $cuestionario = 20;
//        $this->session->set_userdata('d_dh_id', $cuestionario);
//        $this->session->set_userdata('categoria','33');
        
        redirect('checklist/etapaA');
        
    }

    public function etapaA(){
        global $admin, $data;
        $no_categoria = $this->session->userdata('categoria');
        $this->isUltimaCategoria($no_categoria, $this->session->userdata('plan_accion_checklist'));
        
        $data['sucursal'] = $this->checklist_model->datos_sucursal($this->session->userdata('d_dh_id'));
        $data['d_dh_id'] = $this->session->userdata('d_dh_id');
        
        
        $resultado = $this->checklist_model->get_nombre_grupo_categoria_dh($no_categoria);
        $datos = array();
        
        array_push($datos, $this->get_array_datos($resultado->nombre, $resultado->grupo, $no_categoria));
        
        $data['datos'] = $datos;        
        
        $this->load->view('template/header', $admin);
        $this->load->view('template/open_content_container', $data);
        $this->load->view('menu/menu_supervisor');
        $this->load->view('checklist/etapaA');
        $this->load->view('template/close_content_container');
        $this->load->view('template/footer');   
    }
           
    public function logOut() {
        //termina session de ususario
        $this->session->sess_destroy();
        redirect(base_url());
    }
        /**
     * Funcion que se encarga de pasarle los datos de cada una de las preguntas de los dispositivos,
     * ya sea refrigeradores o congeladores
     * @param type $tipo_dispositivo
     * @param Array of Array $id_preguntas Contiene todos los id de las preguntas de todos los dispositivos 
     * @param Array $respuestas
     * @param Entero $d_dh_id
     * @param Entero $no_categoria
     * @param Entero $no_dispositivos
     * @param Array $no_aplica
     * @example 
     * $id_preguntas[0][0] Primer dispositivo primera pregunta
     * $id_preguntas[1][0] Primer dispositivo segunda pregunta
     * ...
     * $id_preguntas[0][1] Segundo Dispositivo, primera pregunta
     * $id_preguntas[0][1] Segundo Dispositivo, Segunda pregunta 
     */
    public function guardar_datos_dispositivos($tipo_dispositivo,$id_preguntas,$respuestas,$d_dh_id,$no_categoria,$no_aplica,$no_dispositivos,$nombres_dispositivos,$observaciones){
        for($aux = 0;$aux < $no_dispositivos; $aux++ ){
            $contador = 0;
            foreach($id_preguntas as $row){
                $dcd_po = $this->verificar_no_aplica($respuestas[$contador][$aux],$no_aplica[$contador]);
                $valor_no_aplica = $this->verifica_no_aplica_bool($no_aplica[$contador]);
                $nombre = $nombres_dispositivos[$aux];
                $ae_atributo_evaluado_id = $row->ae_id;
                $dh_id = $d_dh_id;
                $d_dispositivo_id = $tipo_dispositivo;
                $this->checklist_model->guardar_po_dh_calificacion_dispositivo($dcd_po,$ae_atributo_evaluado_id,$dh_id,$d_dispositivo_id,$aux + 1,$nombre,$valor_no_aplica);
                $contador++;
            }
        }
        $this->checklist_model->guardar_datos_constante_control_dh($no_categoria,$d_dh_id,$observaciones);
    }
    /**
     * Funcino que se encarga de cargar los datos de cada una de las subcategorias
     * despues del llenado de los datos en la vista etapaA
     */
    public function procesar(){
        global $admin, $data;
        
        $no_categoria = $this->session->userdata("categoria");
        $d_dh_id = $this->session->userdata("d_dh_id");
        $nombre_categoria = str_replace(" ", "_", $this->elimina_acentos($this->checklist_model->get_nombre_categoria_dh($no_categoria)->nombre));
        $respuestas = $this->input->post("Resp_$nombre_categoria");//Arreglo de Respuetas
        $observaciones = $this->input->post("Obser_$nombre_categoria");//Una sola cadena
        $id_preguntas = $this->checklist_model->get_id_atributo_evaluado($no_categoria);//Arreglo de Objetos
        $no_aplica = $this->rellenar_arreglo_no_aplica($no_categoria,$nombre_categoria);      
        
        switch($nombre_categoria){
            case "Refrigeracion":
                $nombres_dispositivos = $this->input->post("nombre_$nombre_categoria");//Arreglo
                $no_refrigeradores = $this->input->post("no_refrigeradores");//Entero
                $tipo_dispositivo = 1;
                $this->guardar_datos_dispositivos($tipo_dispositivo, $id_preguntas, $respuestas, $d_dh_id, $no_categoria,$no_aplica, $no_refrigeradores, $nombres_dispositivos,$observaciones);
                break;
            case "Congelacion":
                $nombres_dispositivos = $this->input->post("nombre_$nombre_categoria");//Arreglo
                $no_congeladores = $this->input->post("no_congeladores");//Entero
                $tipo_dispositivo = 2;
                $this->guardar_datos_dispositivos($tipo_dispositivo, $id_preguntas, $respuestas, $d_dh_id,$no_categoria,$no_aplica , $no_congeladores, $nombres_dispositivos,$observaciones);
                break;
            default:
                $contador = 0;
                foreach ($id_preguntas as $ae_atributo_evaluado_id){
                    $valor_po = $this->verificar_no_aplica($respuestas[$contador],$no_aplica[$contador]);
                    $valor_no_aplica = $this->verifica_no_aplica_bool($no_aplica[$contador]);
                    $this->checklist_model->guardar_po_na_dh_calificacion($valor_po,$ae_atributo_evaluado_id->ae_id,$d_dh_id,$valor_no_aplica);
                    $contador++;
                }
                $this->checklist_model->guardar_datos_constante_control_dh($no_categoria,$d_dh_id,$observaciones);
                break;
        }
        $this->isUltimaCategoria($no_categoria,$this->session->userdata('plan_accion_checklist'));
        
        $this->session->set_userdata('categoria',$no_categoria + 1);

        redirect('checklist/etapaA');
 
    }
    /**
     * Funcion que se encarga de verificar el arreglo de checkbox, en caso de 
     * que no seleccionen ninguno, esta funcion se encarga de llenarlo commpletamente
     * con elementos nulos y aquellos indices que no selecciono se encarga de 
     * llenarlos con elementos nulos 
     * @param type $no_categoria
     * @param type $nombre_categoria
     * @return array
     */
    private function rellenar_arreglo_no_aplica($no_categoria,$nombre_categoria){
        $no_preguntas = $this->checklist_model->get_cantidad_preguntas($no_categoria)->cantidad_preguntas;
        $arreglo_aux = array();
        
        if(!isset($_POST["no_aplica_$nombre_categoria"])){
            for($aux = 0; $aux < $no_preguntas;$aux++){
                array_push($arreglo_aux,null);
            }
        }else{
            $no_aplica = $this->input->post("no_aplica_$nombre_categoria");
            for($aux = 0; $aux < $no_preguntas;$aux++){
                if(array_key_exists($aux,$no_aplica)){
                    array_push($arreglo_aux, $no_aplica[$aux]);
                }else{
                    array_push($arreglo_aux,null);
                }
            }
        }
        return $arreglo_aux;
    }
    /**
     * Funcion que verifica si es null el objeto
     * @param on u off $no_aplica
     * @return boolean
     */
    private function verifica_no_aplica_bool($no_aplica){
        if(is_null($no_aplica)){
            return FALSE;
        }else{
            return TRUE;
        }
    }
            
    /**
     * Devido a que html regresa un arreglo con solo aquellos elementos que
     * se encontraron encendido (checker`s de la vista etapa A) se verifica 
     * que sea nulo
     * @param entero $valor_respuesta
     * @param on u off $no_aplica
     * @return int
     */
    private function verificar_no_aplica($valor_respuesta,$no_aplica){
        if(is_null($no_aplica)){
            return $valor_respuesta;
        }else{
            return 0;
        }
    }

    /**
     * Funcion que carga nueva vista en caso de que sea la ultima
     * categoria de la base de datos y genera el reporte
     * @param entero $no_categoria
     */
    public function isUltimaCategoria($no_categoria,$plan){
        $ultima_categoria = $this->checklist_model->get_ultimo_no_categoria_dh();
        if($no_categoria >= $ultima_categoria->no_categoria){
            //redirect('checklist/reporte');
            if(!$plan){
                redirect('checklist/plan_accion');
            }
            redirect('checklist/reporte');
        }
    }
    
    public function plan_accion(){
        global $admin, $data;
                
        $data['d_dh_id'] = $this->session->userdata('d_dh_id');
        $data['lista_grupos'] = $this->checklist_model->get_lista_grupos();
        
        $this->load->view('template/header', $admin);
        $this->load->view('template/open_content_container', $data);
        $this->load->view('menu/menu_supervisor');
        $this->load->view('checklist/plan_accion');
        $this->load->view('template/close_content_container');
        $this->load->view('template/footer');
    }
    
    public function guarda_plan(){
        $this->session->set_userdata('plan_accion_checklist',TRUE);
        $acciones = $this->input->post('acciones');
        $desviaciones = $this->input->post('desviaciones');
        $fechas = $this->input->post('fechas');
        $responsables = $this->input->post('responsables');
        $grupos = $this->input->post('grupos');
    
        $this->reporte();
        
    }        
    
    /**
     * Funcion que se encarga de la creacion del reporte
     */
    public function reporte(){
        global $admin, $data;
        
        $d_dh_id = $this->session->userdata("d_dh_id");
        
        $datos = array();
        $lista_categorias = $this->checklist_model->get_categorias_dh();
        
        $total_pp = 0;
        $total_po = 0;
        foreach($lista_categorias as $categoria){
            switch($categoria->nombre){
                case "Refrigeración":
                    $no_ref = $this->es_Null($this->checklist_model->get_max_dispositivos($d_dh_id,1)->max_dispositivos);
                    $subg = $this->es_Null($this->checklist_model->get_ppt($categoria->no_categoria)->ppt)*$no_ref;//Subtotal del Grupo
                    $po = $this->es_Null($this->checklist_model->get_po_dispositivo($d_dh_id,1)->po);
                    $mna_t = $this->es_Null($this->checklist_model->get_mna_dispositivos($d_dh_id,1)->mna);
                    $lista_preguntas = $this->checklist_model->get_matricula_pregunta_pp($categoria->no_categoria);
                    $observaciones = $this->checklist_model->get_observaciones($categoria->no_categoria,$d_dh_id)->observaciones;
                    $p_evaluar = $subg - $mna_t;
                    $porcentaje = round($this->get_porcentaje($po, $p_evaluar),1,PHP_ROUND_HALF_UP);
                    $total_pp += $subg;
                    $total_po += $po;
                    
                    array_push($datos,$this->get_array_datos_reporte($categoria->nombre, $categoria->grupo, $subg, $po, $porcentaje,$lista_preguntas,$observaciones,$mna_t,$p_evaluar));
                    $nombres_disp = $this->checklist_model->get_nombre_no_dispositivo_dipositivos(1,$d_dh_id);
                    $datos_refri = array();
                    foreach($nombres_disp as $disp){
                        $valores = $this->checklist_model->get_valores_dispositivo($d_dh_id,1,$disp->no_dispositivo);
                        $pot = $this->checklist_model->get_pot_dispositivo($d_dh_id,1,$disp->no_dispositivo)->pot;
                        array_push($datos_refri, $this->get_array_dispositivo($disp->nombre, $valores, $pot));
                    }
                    $data['max_ref'] = $no_ref;
                    $data['datos_refri'] = $datos_refri;
                    break;
                case "Congelación":
                    $no_cong = $this->es_Null($this->checklist_model->get_max_dispositivos($d_dh_id,2)->max_dispositivos);
                    $subg = $this->es_Null($this->checklist_model->get_ppt($categoria->no_categoria)->ppt)*$no_cong;//Subtotal del Grupo
                    $po = $this->es_Null($this->checklist_model->get_po_dispositivo($d_dh_id,2)->po);
                    $mna_t = $this->es_Null($this->checklist_model->get_mna_dispositivos($d_dh_id,2)->mna);
                    $lista_preguntas = $this->checklist_model->get_matricula_pregunta_pp($categoria->no_categoria);
                    $observaciones = $this->checklist_model->get_observaciones($categoria->no_categoria,$d_dh_id)->observaciones;
                    $p_evaluar = $subg - $mna_t;
                    $porcentaje = round($this->get_porcentaje($po, $p_evaluar),1,PHP_ROUND_HALF_UP);
                    $total_pp += $subg;
                    $total_po += $po;
                    
                    array_push($datos,$this->get_array_datos_reporte($categoria->nombre, $categoria->grupo, $subg, $po, $porcentaje,$lista_preguntas,$observaciones,$mna_t,$p_evaluar));
                    $nombres_disp = $this->checklist_model->get_nombre_no_dispositivo_dipositivos(2,$d_dh_id);
                    
                    $datos_cong = array();
                    foreach($nombres_disp as $disp){
                        $valores = $this->checklist_model->get_valores_dispositivo($d_dh_id,2,$disp->no_dispositivo);
                        $pot = $this->checklist_model->get_pot_dispositivo($d_dh_id,2,$disp->no_dispositivo)->pot;
                        array_push($datos_cong, $this->get_array_dispositivo($disp->nombre, $valores, $pot));
                    }
                    $data['max_cong'] = $no_cong;
                    $data['datos_cong'] = $datos_cong;
                    break;

                default:
                    //Obtencion de los datos
                    $subg = $this->es_Null($this->checklist_model->get_ppt($categoria->no_categoria)->ppt);//Subtotal del Grupo
                    $mna = $this->es_Null($this->checklist_model->get_mna($categoria->no_categoria,$d_dh_id)->mna);//Menos N/A
                    $po = $this->es_Null($this->checklist_model->get_po($categoria->no_categoria,$d_dh_id)->po);
                    $lista_preguntas = $this->checklist_model->get_matricula_pregunta_valorPP_valorPO($categoria->no_categoria,$d_dh_id);
                    $observaciones = $this->checklist_model->get_observaciones($categoria->no_categoria,$d_dh_id)->observaciones;
                    $p_evaluar = $subg - $mna;
                    $porcentaje = $this->get_porcentaje($po,$p_evaluar);
                    $total_pp += $subg;
                    $total_po += $po;
                    //Formato a los datos
                    $subg = round( $subg, 1, PHP_ROUND_HALF_UP);
                    $p_evaluar = round($p_evaluar,1,PHP_ROUND_HALF_UP);
                    $porcentaje = round($porcentaje,1, PHP_ROUND_HALF_UP);
                    
                    array_push($datos,$this->get_array_datos_reporte($categoria->nombre, $categoria->grupo, $subg, $po, $porcentaje,$lista_preguntas,$observaciones,$mna,$p_evaluar));                    
                    break;
            }
        }
        
        $data['resumen'] = $this->get_array_resumen($d_dh_id);
        $data['lista_categorias'] = $lista_categorias;
        $datos_totales = $this->get_array_datos_totales($d_dh_id);
        $data['datos_totales'] = $datos_totales;
        $data['semaforo'] = $this->get_array_semaforo($datos_totales['porcentaje']);
        $data['datos'] = $datos;
        
        $this->load->view('template/header', $admin);
        $this->load->view('template/open_content_container', $data);
        $this->load->view('menu/menu_supervisor');
        $this->load->view('checklist/reporte');
        $this->load->view('template/close_content_container');
        $this->load->view('template/footer');
        
    }
    private function get_array_semaforo($porcentaje){
        $cumplimiento = false;
        $incumplimiento = false;
        $estado_critico = false;
        if($porcentaje>=90 && $porcentaje<=100){
            $cumplimiento = true;
        }elseif($porcentaje <90 && $porcentaje >=80){
            $incumplimiento = true;
        }else{
            $estado_critico = true;
        }
        return array(
            'cumplimiento'=>$cumplimiento,
            'incumplimiento'=>$incumplimiento,
            'estado_critico'=>$estado_critico
        );
    }
    private function get_array_datos_totales($d_dh_id){
        
        $pot_dispositivos = $this->checklist_model->get_sum_pot_disp($d_dh_id)->pot;
        $pot_preg = $this->checklist_model->get_pot_preguntas($d_dh_id)->pot;
        $ppt_preg = $this->checklist_model->get_ppt_preguntas($d_dh_id)->ppt;
        $ppt_dispositivos = $this->checklist_model->get_ppt_disp($d_dh_id)->ppt;
        
        $puntos_obtenidos = $pot_dispositivos + $pot_preg;
        $puntos_posibles = $ppt_dispositivos + $ppt_preg;
        return array(
            'pot' => $puntos_obtenidos , 
            'ppt' => $puntos_posibles ,
            'porcentaje' => round($this->get_porcentaje($puntos_obtenidos, $puntos_posibles),1,PHP_ROUND_HALF_UP)
        );
    }
    private function get_array_datos_resumen($nombre,$grupo,$subg,$po,$porcentaje){
        return array(
            'nombre' =>  $nombre,
            'grupo' => $grupo,
            'subg' => $subg,
            'po' => $po,
            'porcentaje' => $porcentaje
        );
    }
    public function get_array_dispositivo($nombre,$valores,$pot){
        return array(
            "nombre" => $nombre,
            "valores" => $valores,
            "pot" =>$pot
        );
    }
    /**
     * Funcion que se encarga de retornar el estado dependiendo su porcentaje
     * @param float $porcentaje
     * @return string
     */
    public function get_estado($porcentaje){
        if($porcentaje >= 90){
            return "Satisfactorio";
        }elseif($porcentaje > 80 and $porcentaje < 90){
            return "Inclumplimiento";
        }else{
            return "Estado Critico";
        }
    } 
    /**
     * Funcion para regresar un cero en vez de null
     * @param type $dato
     * @return int
     */
    public function es_Null($dato){
        if(is_null($dato)){
            return 0;
        }
        return $dato;
    }
    /**
     * Funcion que calcula el porcentaje, verificando que no exista division entre
     * cero o algun numero negativo
     * @param entero $puntos_obtenidos
     * @param entero $puntos_evaluar
     * @return int
     */
    private function get_porcentaje($puntos_obtenidos,$puntos_evaluar){
        if($puntos_evaluar <= 0){
            return 0;
        }else{
            return ($puntos_obtenidos / $puntos_evaluar)*100;
        }
    }
            
    /**
     * Funcion que genera una estructura necesaria para mostrarla en la vista reporte
     * @param String $nombre nombre de la categoria
     * @param String $grupo Caracteres de la categoria
     * @param Entero $pp puntos posibles
     * @param Entero $po puntos obtenidos
     * @param Entero $porcentaje valor correspondiente
     * @return array
     */
    public function get_array_datos_reporte($nombre,$grupo,$pp,$po,$porcentaje,$lista_preguntas,$observaciones,$mna,$pae){
        return array(
            "nombre" => $nombre,
            "grupo" => $grupo,
            "pp" => $pp,
            "po" => $po,
            "porcentaje" => $porcentaje,
            "preguntas" => $lista_preguntas,
            "observaciones" => $observaciones,
            "mna" => $mna,
            "pae" => $pae
        ); 
    }
    /**
     * Funcion que genera un arreglo con la estructura ncesaria para la vista etapaA
     * @param type $nombre_con Caracteres con acento
     * @param type $nombre_sin Caracteres sin acento
     * @param type $grupo   Caracteres del grupo al que pertenecen las preguntas
     * @param type $no_categoria numero de la categoria de las preguntas que se quiere
     */
    
    public function get_array_datos($nombre_con,$grupo,$no_categoria){
        return array(
            "nombre" => $nombre_con,
            "nombre_sin" => $this->elimina_acentos($nombre_con),
            "grupo" => $grupo,
            "preguntas" => $this->checklist_model->get_preguntas($no_categoria)
        );           
    }
    /**
     * Funcion para sustituir las letras con acentos a letras sin ellos 
     * @param String $cadena Cadena que contiene el texto con acentos
     * @return String Cadena de texto que no contiene acentos
     */
    private function elimina_acentos($cadena) {
        $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';
        $modificadas= 'AAAAAAAcEEEEIIIIDNOOOOOOUUUUYbbaaaaaaaceeeeiiiidnoooooouuuyybyRr';
        return utf8_encode(strtr(utf8_decode($cadena),utf8_decode($originales),$modificadas));
    }

    public function pdf(){
        global $admin, $data;
        
        $this->load->library('Pdf');
        $pdf = new Pdf('P', 'mm', 'A4', true, 'UTF-8', false);
        $pdf->SetCreator(PDF_CREATOR);
        $pdf->SetAuthor('Frederick Valentin');
        $pdf->SetTitle('Evaluación ASPI');
        $pdf->SetSubject('TITULO');
        $pdf->SetKeywords('ASPI, MTI, hk');

        // datos por defecto de cabecera, se pueden modificar en el archivo tcpdf_config_alt.php de libraries/config
        $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE . ' 001', PDF_HEADER_STRING, array(0, 64, 255), array(0, 64, 128));
        $pdf->setFooterData($tc = array(0, 64, 0), $lc = array(0, 64, 128));

        // datos por defecto de cabecera, se pueden modificar en el archivo tcpdf_config.php de libraries/config
        $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
        $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

        // se pueden modificar en el archivo tcpdf_config.php de libraries/config
        $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

        // se pueden modificar en el archivo tcpdf_config.php de libraries/config
        $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
        $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
        $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

        // se pueden modificar en el archivo tcpdf_config.php de libraries/config
        $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

        //relación utilizada para ajustar la conversión de los píxeles
        $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);


        // ---------------------------------------------------------
        // establecer el modo de fuente por defecto
        $pdf->setFontSubsetting(true);

        // Establecer el tipo de letra
        //Si tienes que imprimir carácteres ASCII estándar, puede utilizar las fuentes básicas como
        // Helvetica para reducir el tamaño del archivo.
        $pdf->SetFont('Helvetica', '', 14, '', true);

        // Añadir una página
        // Este método tiene varias opciones, consulta la documentación para más información.
        $pdf->AddPage();

        //fijar efecto de sombra en el texto
        $pdf->setTextShadow(array('enabled' => true, 'depth_w' => 0.2, 'depth_h' => 0.2, 'color' => array(196, 196, 196), 'opacity' => 1, 'blend_mode' => 'Normal'));
        
        $datos = $data['datos'];
        
        //preparamos y maquetamos el contenido a crear
        $html = '';
        $html .= "<style type=text/css>";
        $html .= "th{color: #fff; font-weight: bold; background-color: #222}";
        $html .= "td{background-color: #AAC7E3; color: #fff}";
        $html .= "</style>";
        $html .= "<h2>Localidades de " . ' Variable' . "</h2><h4>Actualmente: variable localidades</h4>";
        $html .= "<table width='100%'>";
        $html .= "<tr><th>Id localidad</th><th>Localidades</th></tr>";
        foreach($datos as $categoria){
            $html .= "<tr><td class=\"id\">" . $categoria['nombre'] . "</td><td class='localidad'>". $categoria['po']."</td></tr>";
        }
        $html .= "</table>";

        // Imprimimos el texto con writeHTMLCell()
        $pdf->writeHTMLCell($w = 0, $h = 0, $x = '', $y = '', $html, $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);

        // ---------------------------------------------------------
        // Cerrar el documento PDF y preparamos la salida
        // Este método tiene varias opciones, consulte la documentación para más información.
        $nombre_archivo = utf8_decode($filename);
        $pdf->Output($nombre_archivo, 'I');
    }           
    public function carga_estadisticas() {
        global $data, $admin;
        $data['tPreg'] = $this->mining_model->total_preguntas();
        $data['tCuest'] = $this->mining_model->total_cuestionarios();
    }
    
    private function get_array_resumen($d_dh_id){
        $datos = array();
        $lista_categorias = $this->checklist_model->get_categorias_dh();
        
        $total_pp = 0;
        $total_po = 0;
        foreach($lista_categorias as $categoria){
            switch($categoria->nombre){
                case "Refrigeración":
                    $no_ref = $this->es_Null($this->checklist_model->get_max_dispositivos($d_dh_id,1)->max_dispositivos);
                    $subg = $this->es_Null($this->checklist_model->get_ppt($categoria->no_categoria)->ppt)*$no_ref;//Subtotal del Grupo
                    $po = $this->es_Null($this->checklist_model->get_po_dispositivo($d_dh_id,1)->po);
                    $mna_t = $this->es_Null($this->checklist_model->get_mna_dispositivos($d_dh_id,1)->mna);
                    $lista_preguntas = $this->checklist_model->get_matricula_pregunta_pp($categoria->no_categoria);
                    $observaciones = $this->checklist_model->get_observaciones($categoria->no_categoria,$d_dh_id)->observaciones;
                    $p_evaluar = $subg - $mna_t;
                    $porcentaje = round($this->get_porcentaje($po, $p_evaluar),1,PHP_ROUND_HALF_UP);
                    $total_pp += $subg;
                    $total_po += $po;
                    
                    array_push($datos,$this->get_array_datos_resumen($categoria->nombre, $categoria->grupo, $p_evaluar, $po, $porcentaje));
                    break;
                case "Congelación":
                    $no_cong = $this->es_Null($this->checklist_model->get_max_dispositivos($d_dh_id,2)->max_dispositivos);
                    $subg = $this->es_Null($this->checklist_model->get_ppt($categoria->no_categoria)->ppt)*$no_cong;//Subtotal del Grupo
                    $po = $this->es_Null($this->checklist_model->get_po_dispositivo($d_dh_id,2)->po);
                    $mna_t = $this->es_Null($this->checklist_model->get_mna_dispositivos($d_dh_id,2)->mna);
                    $lista_preguntas = $this->checklist_model->get_matricula_pregunta_pp($categoria->no_categoria);
                    $observaciones = $this->checklist_model->get_observaciones($categoria->no_categoria,$d_dh_id)->observaciones;
                    $p_evaluar = $subg - $mna_t;
                    $porcentaje = round($this->get_porcentaje($po, $p_evaluar),1,PHP_ROUND_HALF_UP);
                    $total_pp += $subg;
                    $total_po += $po;
                    
                    array_push($datos,$this->get_array_datos_resumen($categoria->nombre, $categoria->grupo, $p_evaluar, $po, $porcentaje));                    
                    break;
                case "Servicio":
                case "Sushi";
                case "VTP";
                case "Cantador";
                case "Teppanyaki";
                case "Repartidores";
                    $subg += $this->es_Null($this->checklist_model->get_ppt($categoria->no_categoria)->ppt);//Subtotal del Grupo
                    $mna += $this->es_Null($this->checklist_model->get_mna($categoria->no_categoria,$d_dh_id)->mna);//Menos N/A
                    $po += $this->es_Null($this->checklist_model->get_po($categoria->no_categoria,$d_dh_id)->po);
                    $total_pp += $subg;
                    $total_po += $po;
                    if($categoria->nombre == "Repartidores"){
                        $p_evaluar = $subg - $mna;
                        $porcentaje = $this->get_porcentaje($po, $p_evaluar);
                        
                        $subg = round( $subg, 1, PHP_ROUND_HALF_UP);
                        $mna = round($mna, 1, PHP_ROUND_HALF_UP);
                        $p_evaluar = round($p_evaluar,1,PHP_ROUND_HALF_UP);
                        $porcentaje = round($porcentaje,1, PHP_ROUND_HALF_UP);
                        
                        array_push($datos,$this->get_array_datos_resumen("Servicio", "SM", $p_evaluar, $po, $porcentaje));
                    }
                    break;
                default:
                    $subg = $this->es_Null($this->checklist_model->get_ppt($categoria->no_categoria)->ppt);//Subtotal del Grupo
                    $mna = $this->es_Null($this->checklist_model->get_mna($categoria->no_categoria,$d_dh_id)->mna);//Menos N/A
                    $po = $this->es_Null($this->checklist_model->get_po($categoria->no_categoria,$d_dh_id)->po);
                    $lista_preguntas = $this->checklist_model->get_matricula_pregunta_valorPP_valorPO($categoria->no_categoria,$d_dh_id);
                    $observaciones = $this->checklist_model->get_observaciones($categoria->no_categoria,$d_dh_id)->observaciones;
                    $p_evaluar = $subg - $mna;
                    $porcentaje = $this->get_porcentaje($po,$p_evaluar);
                    $total_pp += $subg;
                    $total_po += $po;
                    //Formato a los datos
                    $subg = round( $subg, 1, PHP_ROUND_HALF_UP);
                    $p_evaluar = round($p_evaluar,1,PHP_ROUND_HALF_UP);
                    $porcentaje = round($porcentaje,1, PHP_ROUND_HALF_UP);
                    
                    array_push($datos,$this->get_array_datos_resumen($categoria->nombre, $categoria->grupo, $p_evaluar, $po, $porcentaje));                    
                    
                    break;
            }
        }
        return $datos;
    }
    public function cuestionario_checklist($d_dh_id){
        global $data, $admin;
        
        $this->session->set_userdata('d_dh_id', $d_dh_id);
        $this->session->set_userdata('categoria',21);
        
        $this->reporte();
                
    }
    
}